package com.soil.code.generation.infrastructure.util;

import com.google.common.base.CaseFormat;

import static com.google.common.base.Strings.nullToEmpty;

/**
 * @author zeno
 */
public class NamingCaseUtil{
  /**
   * @param name
   *
   * @return 将变量名转为蛇形命名法格式的字符串
   */
  public static String toLowerSnakeCase( String name ){
    return null == name ? null : CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE,name);
  }

  /**
   * @param name
   *
   * @return 将变量名转为蛇形命名法格式的字符串
   */
  public static String toUpperSnakeCase( String name ){
    return null == name ? null : CaseFormat.UPPER_CAMEL.to(CaseFormat.UPPER_UNDERSCORE,name);
  }

  /**
   * @param name
   *
   * @return 将变量名转为小写单词开头的驼峰命名法格式的字符串
   */
  public static String toLowerCamelCase( String name ){
    return null == name ? null : CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL,name);
  }


  /**
   * @param name
   *
   * @return 将变量名转为小写单词开头的驼峰命名法格式的字符串
   */
  public static String toUpperCamelCase( String name ){
    return null == name ? null : CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL,name);
  }

  /**
   * 判断 变量是否为驼峰命名法格式的字符串
   *
   * @param name
   */
  public static boolean isCamelCase( String name ){
    if( !nullToEmpty(name).trim().isEmpty() ){
      return !name.equals(name.toLowerCase()) && !name.equals(name.toUpperCase()) && name.indexOf('_') < 0;
    }
    return false;
  }

  /**
   * 判断 变量是否为蛇形命名法格式的字符串
   *
   * @param input
   *
   * @since 2.7.8
   */
  public static boolean isSnakeCase( String input ){
    if( !nullToEmpty(input).trim().isEmpty() ){
      return input.indexOf('_') >= 0;
    }
    return false;
  }
}
